home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-07-15 | 3.3 KB | 136 lines | [TEXT/MPS ] |
- // imWare
- // Wednesday, February 14, 1990
- // James Beninghaus
-
- #include <stdio.h>
- #include <string.h>
- #include <ToolUtils.h>
- #include <Errors.h>
- #include <cd.h>
-
- #define sUNDEF 0
- #define sDRIVE 1
- #define sPLAY 2
- #define sPAUSE 3
- #define sCONTINUE 4
- #define sSTOP 5
- #define sEJECT 6
-
- #define min(a, b) (a<b ? a:b)
- #define max(a, b) (a>b ? a:b)
-
- void Usage() {
- printf("cd [-drive 1..6] [-play [1..73 [1..73]] [stereo | mono] | -pause | -continue | -stop | -eject]\n");
- exit(paramErr);
- }
-
- main (int argc, char *argv[]) {
-
- auto OSErr osErr;
- auto short drive,
- ioRefNum,
- count,
- track,
- state;
- auto Byte userCDNumber,
- userStart,
- userStop,
- discStart,
- discStop,
- audioStatus,
- playMode,
- cntlField,
- minutes,
- seconds,
- frames;
- auto Boolean discInPlace;
-
- InitGraf((Ptr) &qd.thePort);
-
- state = sUNDEF;
- userCDNumber = 1;
- userStart = 0;
- userStop = 100;
- playMode = STEREO;
-
- count = 0;
- while (++count < argc)
- if (0 == strcmp("-drive", argv[count]))
- state = sDRIVE;
- else if (1 == sscanf(argv[count], "%hd", &drive) && 1 <= drive && drive <= 6 && sDRIVE == state) {
- state = sUNDEF;
- userCDNumber = (Byte) drive;
- } else if (0 == strcmp("-play", argv[count]) && sUNDEF == state)
- state = sPLAY;
- else if (1 == sscanf(argv[count], "%hd", &track) && 1 <= track && track <= 73 && sPLAY == state)
- if (0 == userStart)
- userStart = (Byte) track;
- else
- userStop = (Byte) track;
- else if (0 == strcmp("stereo", argv[count]) && sPLAY == state)
- playMode = STEREO;
- else if (0 == strcmp("mono", argv[count]) && sPLAY == state)
- playMode = MONO;
- else if (0 == strcmp("-pause", argv[count]) && sUNDEF == state)
- state = sPAUSE;
- else if (0 == strcmp("-continue", argv[count]) && sUNDEF == state)
- state = sCONTINUE;
- else if (0 == strcmp("-stop", argv[count]) && sUNDEF == state)
- state = sSTOP;
- else if (0 == strcmp("-eject", argv[count]) && sUNDEF == state)
- state = sEJECT;
- else
- Usage();
-
- osErr = OpenCD(userCDNumber, &ioRefNum);
- if (noErr == osErr)
- osErr = DiscStatus(ioRefNum, &discInPlace);
- if (noErr == osErr) {
- if (discInPlace) {
- switch (state) {
- case sUNDEF :
- case sDRIVE :
- case sPLAY :
- osErr = TrackCount(ioRefNum, &discStop);
- if (noErr == osErr) {
- discStart = 0;
- do
- osErr = TrackInfo(ioRefNum, ++discStart, &cntlField, &minutes, &seconds, &frames);
- while (BitTst(&cntlField, 5) && noErr == osErr);
- if (noErr == osErr) {
- osErr = AStop(ioRefNum, max(min(userStop, discStop), discStart));
- if (noErr == osErr)
- osErr = APlay(ioRefNum, min(max(userStart, discStart), discStop), playMode);
- }
- }
- break;
- case sPAUSE :
- osErr = AStatus(ioRefNum, &audioStatus, &playMode, &cntlField, &minutes, &seconds, &frames);
- if (noErr == osErr)
- if (PLAYING == audioStatus)
- osErr = APause(ioRefNum, PAUSE);
- break;
- case sCONTINUE :
- osErr = AStatus(ioRefNum, &audioStatus, &playMode, &cntlField, &minutes, &seconds, &frames);
- if (noErr == osErr)
- if (PAUSED == audioStatus)
- osErr = APause(ioRefNum, CONTINUE);
- break;
- case sSTOP :
- osErr = AStop(ioRefNum, 0);
- break;
- case sEJECT :
- osErr = EjectCD(ioRefNum);
- break;
- }
- }
- }
- exit(osErr);
- }
-
-
-
-
-
-
-